package ar.com.quickMart.database.mysql;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class BaseDaoMySql{
	
	private static final String user = "quickMart";
	private static final String pass = "r1c0sp1b1t0s";
	private static final String dbAddress = "jdbc:mysql://localhost/quickMartDatabase";
	

	/**
	 * connect
	 * 
	 * Establece la conexion con la BDD. Se llama al principio de cada funcion
	 * que necesite conectarse a la BDD. Al finalizar, se debe llamar a disconnnect()
	 * 
	 * @return	Connection	Un objeto de tipo Connection que tiene la conexion con la BDD
	 * 			null		En caso de error
	 */
	protected Connection connect() {
		
		// Creo la variable de conexion a devolver
		Connection connection;
		
		try {
			
			// Cargo el conector
			Class.forName("com.mysql.jdbc.Driver");
			
			// Abro la conexion
			connection = DriverManager.getConnection(dbAddress, user, pass);

		}
		catch(Exception ex) {
			ex.printStackTrace();
			
			// Error al conectar, devuelvo null
			return null;
		}
		
		// Conexion exitosa, devuelvo connection
		return connection;		
	}
	
	/**
	 * disconnect
	 * 
	 * Cierra la conexion con la BDD. Es necesaria al finalizar cada funcion
	 * que haya accedido a la BDD.
	 * 
	 * @param 	connection	La conexion que se desea cerrar o desconectar
	 * 
	 * @return	true	En caso de exito
	 * 			false	En caso contrario
	 */
	protected boolean disconnect(Connection connection) {
		
		try {
			
			// Cierro la conexion
			connection.close();
		}
		catch(Exception ex) {
			ex.printStackTrace();
			
			// Error al desconectar, devuelvo false
			return false;
		}
		
		// Desconexion exitosa, devuelvo true
		return true;		
	}
	

	/**
	 * testConnection
	 * 
	 * Prueba la conexion y desconexion a la BDD y muestra por pantalla
	 * 
	 */
	public static void testConnection() {
		
		Connection connection;
		
		try {
			
			// Cargo el conector
			System.out.println("Cargando conector...");
			Class.forName("com.mysql.jdbc.Driver");
			System.out.println("Conector cargado correctamente.");
			
			// Abro la conexion
			System.out.println("Estableciendo conexion con la BDD...");
			connection = DriverManager.getConnection(dbAddress, user, pass);
			System.out.println("Conexion establecida.");
			
			// Desconecto de la BDD
			System.out.println("Cerrando conexion con la BDD...");
			connection.close();
			System.out.println("Conexion cerrada.");
			
			System.out.println("Exito en la prueba de conexion.");
				
		} catch(SQLException ex) {
            System.out.println("Error de mysql: " + ex.getMessage());
	    } catch(Exception e) {
	    	System.out.println("Se produjo un error inesperado: " + e.getMessage());
	    }
		
	}
}

